package otros;

import java.io.FileNotFoundException;
import java.io.IOException;
import java.rmi.RemoteException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.InputMismatchException;
import java.util.Iterator;
import java.util.Random;
import java.util.Scanner;

import ValueObjects.VOJugador;
import ValueObjects.VOJugadorRanking;
import ValueObjects.VOPartida;
import ValueObjects.VOPelicula;
import logica.Fachada;
import logica.partidas.*;
import logica.excepctions.CodigoIncorrectoException;
import logica.excepctions.JugadorNoExistenteException;
import logica.excepctions.JugadorYaRegistradoException;
import logica.excepctions.NoHayPeliculasDisponiblesException;
import logica.excepctions.PartidaEnCursoException;
import logica.excepctions.PeliculaExistenteException;
import logica.excepctions.PersistenciaException;
import logica.jugadores.*;
import logica.peliculas.*;

public class Pruebas {
	public static void main(String[] args) throws PeliculaExistenteException, JugadorYaRegistradoException, CodigoIncorrectoException, JugadorNoExistenteException, PartidaEnCursoException, NoHayPeliculasDisponiblesException, FileNotFoundException, PersistenciaException, IOException {
			
			Pelicula pe51 = new Pelicula("LA CASA DE CERA", "Todo esta hecho con velas");
			Pelicula pe52 = new Pelicula("SHREK TERCERO", "Amor verde");
			Pelicula pe53 = new Pelicula("RAMBO", "Guerrero indestructible");
			Pelicula pe54 = new Pelicula("TIBURON", "Amenaza marina");
			Pelicula pe55 = new Pelicula("DURMIENDO CON EL ENEMIGO", "Cuando duermes con quien no debes dormir...");
			Peliculas pelis52 = new Peliculas();
			pelis52.Insert(pe51);
			pelis52.Insert(pe52);
			pelis52.Insert(pe53);
			pelis52.Insert(pe54);
			pelis52.Insert(pe55);
			
			Jugadores diccioJugadores = new Jugadores();
			Jugador jugadorPruebaPartidas = new Jugador("JugadorPrueba", "JugadorPrueba", 0, 0, 0);
			Jugador jugadorPrueba2 = new Jugador("alejandro", "alejandro", 0, 0, 0);
			Jugador jugadorPrueba3 = new Jugador("zeus", "zeus", 0, 0, 0);

			Partida p1 = new Partida(1, 50, true, true, pe51.getTitulo(), pe51);
			Partida p2 = new Partida(2, 56, true, true, pe52.getTitulo(), pe52);
			Partida p3 = new Partida(2, -48, true, true, "---BO", pe53);
			jugadorPruebaPartidas.agregarPartida(p1);
			jugadorPruebaPartidas.agregarPartida(p2);
			jugadorPruebaPartidas.agregarPartida(p3);
			diccioJugadores.Insert(jugadorPruebaPartidas);
			diccioJugadores.Insert(jugadorPrueba2);
			diccioJugadores.Insert(jugadorPrueba3);
			boolean salir1 = false;
			while(!salir1){
				
			    System.out.println("MENU DE PRUEBAS PARA METODOS\n");
				  
			    System.out.println("");
			    
			    System.out.println("1 - Metodos de Partidas  (Listo)");

			    System.out.println("2 - Metodos de Partida   (Listo)");

				System.out.println("3 - Metodos de Jugadores (Listo)");
				
				System.out.println("4 - Metodos de Jugador   (Listo)");
				
				System.out.println("5 - Metodos de Peliculas (Listo)");
				
				System.out.println("6 - Metodos de Pelicula  (Listo)");

				System.out.println("7 - Salir");
				
				int n = 0;
				Scanner sc = new Scanner(System.in);
				System.out.print("\nIngrese una opcion: \n");
				try{
					n = sc.nextInt();
				}catch(InputMismatchException e){
					n = 14;
				}
			    switch (n){
			    
			    case 1:
			    	System.out.println("MENU DE PRUEBAS PARA PARTIDAS\n");
					  
				    System.out.println("");
				    
				    System.out.println("1 - ultimaPartidaJugada");

				    System.out.println("2 - listarPartidas");

					System.out.println("3 - Volver al menu anterior");
					boolean salir2 = false;
					while(!salir2){
						
						int n1 = 0;
						Scanner sc1 = new Scanner(System.in);
						System.out.print("\nIngrese una opcion: \n");
						try{
							n1 = sc1.nextInt();
						}catch(InputMismatchException e){
							n1 = 14;
						}
					    switch (n1){
					    case 1:
//							public Partida ultimaPartidaJugada();
							System.out.println("Se devuelve la ultima partida jugada por el jugador: " + jugadorPruebaPartidas.getNombre());
							Partida ultimaPartida = jugadorPruebaPartidas.ultimaPartida();
							System.out.println("Datos de la ultima Partida: ");
							System.out.println("ID: "+ultimaPartida.getIdPartida());
							System.out.println("Puntaje: "+ultimaPartida.getPuntaje());
							System.out.println("Texto adivinado: "+ultimaPartida.getTextoAdivinado());
							System.out.println("Esta acertada: "+ultimaPartida.getEstaAcertada());
							System.out.println("Esta finalizada: "+ultimaPartida.getEstaFinalizada());							
					    	break;
					    case 2:
//							public VOPartida[] listarPartidas();
					    	System.out.println("Se listan las partidas registradas ordenadas por ID del jugador: "+ jugadorPruebaPartidas.getNombre());
					    	VOPartida partidasAListar [] = jugadorPruebaPartidas.listarPartidas();
					    	for(int i20=0;i20<partidasAListar.length;i20++){
					    		System.out.println("ID: "+partidasAListar[i20].getIdPartida());
								System.out.println("Puntaje: "+partidasAListar[i20].getPuntaje());
								System.out.println("Texto adivinado: "+partidasAListar[i20].getTextoAdivinado());
								System.out.println("Esta acertada: "+partidasAListar[i20].getEstaAcertada());
								System.out.println("Esta finalizada: "+partidasAListar[i20].getEstaFinalizada());
								System.out.println("----------------------------------------------");
				    		}
					    	break;
					    case 3:
					    	salir2 = true;
							break;
				    		
					    default: System.out.println("No ingreso un numero correcto. Intente nuevamente.");
					    
					    }
					}

			    	break;
			    case 2:
			    	System.out.println("MENU DE PRUEBAS PARA PARTIDA\n");
					  
				    System.out.println("");
				    
				    System.out.println("1 - arriesgarPelicula");

				    System.out.println("2 - chequearLetra");

				    System.out.println("3 - cantidadOcurrencias");

				    System.out.println("4 - devolverPosiciones");

				    System.out.println("5 - sustituirLetra");

				    System.out.println("6 - letraIngresada");

				    System.out.println("7 - Volver al menu anterior");
				    
			    	boolean salir3 = false;
					while(!salir3){
						
						int n2 = 0;
						Scanner sc2 = new Scanner(System.in);
						System.out.print("\nIngrese una opcion: \n");
						try{
							n2 = sc2.nextInt();
						}catch(InputMismatchException e){
							n2 = 14;
						}
					    switch (n2){
					    case 1:
//					    	public String convertirAguiones();

					    	//  boolean arriesgarPelicula(String tituloPelicula);
					    	System.out.println("Verifica si el String ingresado es igual al titulo de la pelicula");
					    	String titulo1 = "LA CASA DE CERA";
					    	System.out.println("Texto de la Pelicula: "+ titulo1);
						    System.out.println("Ingrese un String a comparar con el titulo:");
							Scanner sc10 = new Scanner(System.in);
						    String tituloAriesgado = sc10.nextLine();
						    Pelicula pe1 = new Pelicula(titulo1, "Todo esta hecho con velas");
				    		Partida pa1 = new Partida(1, 0, false, false, "", pe1);
				    		if(pa1.arriesgarPelicula(tituloAriesgado))
					    		System.out.println("El texto corresponde con la pelicula");
				    		else
					    		System.out.println("El texto no corresponde con la pelicula");
					    	break;
					    case 2:
					    	//  boolean chequearLetra(char letra){
					    	System.out.println("Chequea si la letra ingresada por paramentro pertenece al titulo");
					    	String titulo2 = "LA CASA DE CERA";
					    	System.out.println("Texto de la Pelicula: "+ titulo2);
						    System.out.println("Ingrese un caracter perteneciente al titulo:");
							Scanner sc20 = new Scanner(System.in);
				    		char car2 = sc20.next().charAt(0);
				    		Pelicula pe2 = new Pelicula(titulo2, "Todo esta hecho con velas");
				    		Partida pa2 = new Partida(1, 0, false, false, "", pe2);
				    		if(pa2.chequearLetra(car2))
					    		System.out.println("Se encuentra");
				    		else
					    		System.out.println("No se encuentra");
					    	break;
					    case 3:
					    	//  int cantidadOcurrencias(String cadena, char caracter) {
					    	System.out.println("Devuelve la cantidad de veces que aparece un caracter dado en un String");
					    	System.out.println("Metodo auxiliar para devolverPosiciones");
					    	String texto3 = "A AB ABC ABCD DCBA CBA BA A";
					    	System.out.println("Elija una letra del siguiente texto: "+texto3);
					    	Scanner sc30 = new Scanner(System.in);
				    		char car3 = sc30.next().charAt(0);
				    		Partida p30 = new Partida();
					    	System.out.println("Cantidad de veces que aparece: "+p30.cantidadOcurrencias(texto3,car3));
					    	break;
					    case 4:
					    	//  int[] devolverPosiciones(String texto, char letra);// Auxiliar de sustituir letra
					    	System.out.println("Devuelve las posiciones en donde se encuentra el caracter ingresado dentro del String pasado");
					    	String texto4 = "A AB ABC ABCD DCBA CBA BA A";
					    	System.out.println("Elija una letra del siguiente texto: "+texto4);
					    	Scanner sc40 = new Scanner(System.in);
				    		char car4 = sc40.next().charAt(0);
				    		Partida p4 = new Partida();
				    		int posiciones[] = p4.devolverPosiciones(texto4, car4);
				    		for(int i4=0;i4<posiciones.length;i4++){
						    	System.out.println("Posicion " + i4 + ":" + posiciones[i4] +"\n");
				    		}
					    	break;
					    case 5:
					    	//  void sustituirLetra(char letra);
					    	System.out.println("Se sustituye la letra ingresada por su correspondiente en texto adivinado");
					    	System.out.println("Precondicion: la letra forma parte del titulo y no fue ingresada aun");
					    	String titulo = "LA CASA DE CERA";
					    	System.out.println("Texto de la Pelicula: "+ titulo);
					    	String textoAdivinado = "-- ---- -- ----";
					    	System.out.println("Texto adivinado hasta el momento: "+ textoAdivinado);
						    System.out.println("Ingrese un caracter perteneciente al titulo:");
							Scanner sc50 = new Scanner(System.in);
				    		char car = sc50.next().charAt(0);
				    		Pelicula pe5 = new Pelicula(titulo, "Todo esta hecho con velas");
				    		Partida pa5 = new Partida(1, 0, false, false, textoAdivinado, pe5);
				    		pa5.sustituirLetra(car);
					    	System.out.println("Texto adivinado de la Pelicula luego de ingresar la letra: "+ pa5.getTextoAdivinado());
					    	break;
					    case 6:
					    	// boolean letraIngresada(char c);
						    System.out.println("Se verifica si la letra ingresada ya esta ingresada en el texto adivinado");
						    String textoAdivinado6 = "-A CA-A D- C-RA";
						    System.out.println("Ingrese un caracter para verificar si existe en el texto:  " + textoAdivinado6);
							Scanner sc60 = new Scanner(System.in);
				    		char car6 = sc60.next().charAt(0);
				    		Pelicula pe6 = new Pelicula(textoAdivinado6, "Todo esta hecho con velas");
				    		Partida pa6 = new Partida(1, 0, false, false, textoAdivinado6, pe6);
				    		if(pa6.letraIngresada(car6))
					    		System.out.println("Ya esta ingresada");
				    		else
					    		System.out.println("No esta ingresada");
				    		
					    	break;
					    case 7:
					    	salir3 = true;
				    		break;
				    		
					    default: System.out.println("No ingreso un numero correcto. Intente nuevamente.");
					    
					    }
					}

					break;
			    case 3:
			    	System.out.println("MENU DE PRUEBAS PARA JUGADORES\n");
					  
				    System.out.println("");
				    
				    System.out.println("1 - ListarPorNombre");

				    System.out.println("2 - ListarPartidasPorJugador");

				    System.out.println("3 - listarPorpuntaje");

				    System.out.println("4 - Volver al menu anterior");
				    
			    	boolean salir4 = false;
					while(!salir4){
						int n3 = 0;
						Scanner sc3 = new Scanner(System.in);
						System.out.print("\nIngrese una opcion: \n");
						try{
							n3 = sc3.nextInt();
						}catch(InputMismatchException e){
							n3 = 14;
						}
					    switch (n3){
					    case 1:
//							public VOJugador[] ListarPorNombre();

					    	break;
					    case 2:
//							public VOPartida[] ListarPartidasPorJugador(String nombre);
					    	
					    	break;
					    case 3:
//							public ArrayList<VOJugadorRanking> listarPorpuntaje();
					    	System.out.print("\nSe crea un diccionario de jugadores y crear 4 jugadores para realizar prueba: \n");
							String nombre;
							int puntaje = 0;
							for(int numero=0;numero<4;numero++){
								System.out.print("\nIngrese puntaje para: \n");
								if(numero==0)
									nombre = "Pablo";
								else
									if(numero==1)
										nombre = "Martin";
									else
										if(numero==2)
											nombre = "Juan";
										else
											nombre = "Pepito";
								Scanner sc23 = new Scanner(System.in);
								int aux = numero+1;
								System.out.print("\nIngrese un puntaje para el jugador numero: " +aux+"\n");
								puntaje = sc23.nextInt();
								Jugador ju1 = new Jugador(nombre, nombre, puntaje, 0, 0);
								diccioJugadores.Insert(ju1);
							}
							
					    	System.out.println("Listado por puntos:");
							ArrayList<VOJugadorRanking> prueba = diccioJugadores.listarPorpuntaje();
							Iterator<VOJugadorRanking> iter = prueba.iterator();
							  while(iter.hasNext()){
							   VOJugadorRanking j = iter.next();
							   System.out.println("Nombre: "+ j.getNombre()); 
							   System.out.println("Puntaje: "+ j.getPuntajeAlMomento());
							  }
					    	break;
					    
					    case 4:
					    	salir4 = true;
				    		System.out.println("Menu Principal.");
				    		break;
				    		
					    default: System.out.println("No ingreso un numero correcto. Intente nuevamente.");
					    
					    }
					}

			    	break;				    
			    case 4:
			    	System.out.println("MENU DE PRUEBAS PARA JUGADORES\n");
					  
				    System.out.println("");
				    
				    System.out.println("1 - hayPeliculasSinjugar");

				    System.out.println("2 - verificarTituloSorteado");

				    System.out.println("3 - Volver al menu anterior");
				    
			    	boolean salir5 = false;
					while(!salir5){
						
						int n4 = 0;
						Scanner sc4 = new Scanner(System.in);
						System.out.print("\nIngrese una opcion: \n");
						try{
							n4 = sc4.nextInt();
						}catch(InputMismatchException e){
							n4 = 14;
						}
					    switch (n4){
					    case 1:
//							public boolean hayPeliculasSinjugar(int cantidad);
					    	System.out.println("Verifica si quedan peliculas sin jugar para el jugador: " + jugadorPruebaPartidas.getNombre());

					    	if(jugadorPruebaPartidas.hayPeliculasSinjugar(pelis52.cantidadPeliculas()))
						    	System.out.println("Aun quedan peliculas sin jugar");
						    else
						    	System.out.println("No quedan peliculas sin jugar");
					    	break;
					    case 2:
//							public boolean verificarTituloSorteado(String titulo);
					    	System.out.println("Verifica si el titulo de la pelicula ingresado ya fue jugado.");
					    	System.out.println("Ingrese un titulo para saber si ya fue jugado por el jugador :" + jugadorPruebaPartidas.getNombre());
					    	System.out.println("Disponibles: ");
					    	System.out.println(pe51.getTitulo());
					    	System.out.println(pe52.getTitulo());
					    	System.out.println(pe53.getTitulo());
					    	System.out.println(pe54.getTitulo());
					    	System.out.println(pe55.getTitulo());
							Scanner sc42 = new Scanner(System.in);
						    String titulo42 = sc42.nextLine();
						    if(jugadorPruebaPartidas.verificarTituloSorteado(titulo42))
						    	System.out.println("Ya fue jugado");
						    else
						    	System.out.println("No fue jugado");
					    	break;
					    case 3:
					    	salir5 = true;
				    		break;
				    		
					    default: System.out.println("No ingreso un numero correcto. Intente nuevamente.");
					    
					    }
					}

			    	break;
			    case 5:
			    	System.out.println("MENU DE PRUEBAS PARA PELICULAS\n");
					  
				    System.out.println("");
				    
				    System.out.println("1 - ListarOrdenado");

				    System.out.println("2 - SoretarPelicula");

				    System.out.println("3 - Volver al menu anterior");
				    
			    	boolean salir6 = false;
					while(!salir6){
						
						int n5 = 0;
						Scanner sc5 = new Scanner(System.in);
						System.out.print("\nIngrese una opcion: \n");
						try{
							n5 = sc5.nextInt();
						}catch(InputMismatchException e){
							n5 = 14;
						}
					    switch (n5){
					    case 1:
					    	// public VOPelicula[] ListarOrdenado();
					    	System.out.println("Se listan las peliculas registradas ordenadas alfabeticamente:");
					    	VOPelicula peliculasAListar [] = pelis52.ListarOrdenado();
					    	for(int i5=0;i5<peliculasAListar.length;i5++){
						    	System.out.println(peliculasAListar[i5].getTitulo()+" Descripcion: "+peliculasAListar[i5].getDescripcion());
				    		}
					    	break;
					    case 2:
					    	// public Pelicula SoretarPelicula();
					    	System.out.println("Se registran 5 peliculas y se sortean 10 veces:");
					    	System.out.println("Primer pelicula sorteada: "+pelis52.SoretarPelicula().getTitulo());
				    		System.out.println("Segunda pelicula sorteada: "+pelis52.SoretarPelicula().getTitulo());
				    		System.out.println("Tercera pelicula sorteada: "+pelis52.SoretarPelicula().getTitulo());
				    		System.out.println("Cuarta pelicula sorteada: "+pelis52.SoretarPelicula().getTitulo());
				    		System.out.println("Quinta pelicula sorteada: "+pelis52.SoretarPelicula().getTitulo());
				    		System.out.println("Sexta pelicula sorteada: "+pelis52.SoretarPelicula().getTitulo());
				    		System.out.println("Septima pelicula sorteada: "+pelis52.SoretarPelicula().getTitulo());
				    		System.out.println("Octava pelicula sorteada: "+pelis52.SoretarPelicula().getTitulo());
				    		System.out.println("Novena pelicula sorteada: "+pelis52.SoretarPelicula().getTitulo());
				    		System.out.println("Decima pelicula sorteada: "+pelis52.SoretarPelicula().getTitulo());

					    	break;
					    case 3:
					    	salir6 = true;
				    		break;
				    		
					    default: System.out.println("No ingreso un numero correcto. Intente nuevamente.");
					    
					    }
					}

			    	break;
			    case 6:
			    	System.out.println("MENU DE PRUEBAS PARA PELICULA\n");
					  
				    System.out.println("");
				    
				    System.out.println("1 - convertirAguiones");

				    System.out.println("2 - Volver al menu anterior");
				    
			    	boolean salir7 = false;
					while(!salir7){
						
						int n6 = 0;
						Scanner sc6 = new Scanner(System.in);
						System.out.print("\nIngrese una opcion: \n");
						try{
							n6 = sc6.nextInt();
						}catch(InputMismatchException e){
							n6 = 14;
						}
					    switch (n6){
					    case 1:
//					    	public String convertirAguiones();
							System.out.print("\nIngrese una String y se convertira a guiones: \n");
							Scanner sc70 = new Scanner(System.in);
						    String tituloIngresado = sc70.nextLine();
						    Pelicula a = new Pelicula(tituloIngresado, "");
							System.out.print("Convertido a guiones: "+ a.convertirAguiones());
					    	break;
					    case 2:
					    	salir7 = true;
					    	break;

					    }
					}

			    	break;
			    case 7:
			    	salir1 = true;
		    		System.out.println("Hasta la proxima!");
		    		break;
			    default: System.out.println("No ingreso un numero correcto. Intente nuevamente.");
			    
			    }   
			    


			    
			}
	
	}
}
